package com.insight.config;

import com.insight.common.enums.ExportFormat;
import com.insight.export.generator.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 导出服务配置类
 * 注册所有ExportGenerator实现,并构建格式到生成器的映射
 *
 * @author Insight Team
 */
@Configuration
public class ExportConfig {

    /**
     * 注册Markdown导出生成器
     */
    @Bean
    public ExportGenerator markdownExportGenerator() {
        return new MarkdownExportGenerator();
    }

    /**
     * 注册HTML导出生成器
     */
    @Bean
    public ExportGenerator htmlExportGenerator() {
        return new HtmlExportGenerator();
    }

    /**
     * Excel导出生成器通过@Component("EXCEL")自动注册
     * Spring会自动注入MetadataColumnRepository依赖
     */

    /**
     * 注册PDF导出生成器
     */
    @Bean
    public ExportGenerator pdfExportGenerator() {
        return new PdfExportGenerator();
    }

    /**
     * 构建ExportFormat到ExportGenerator的映射
     * 自动从所有注册的生成器中构建Map,便于ExportService查找
     *
     * @param generators 所有ExportGenerator实例(Spring自动注入List)
     * @return 格式到生成器的映射
     */
    @Bean
    public Map<ExportFormat, ExportGenerator> exportGenerators(List<ExportGenerator> generators) {
        return generators.stream()
                .collect(Collectors.toMap(
                        ExportGenerator::getSupportedFormat,
                        Function.identity(),
                        (existing, replacement) -> existing, // 如果有重复,保留第一个
                        HashMap::new
                ));
    }
}
